import { get, post, put, del } from '~/utils/request';
import type {
  IPaginationResponse,
  IDict,
  IDictData,
  ICreateDict,
  ICreateDictData,
  IUpdateDict,
  IUpdateDictData,
  IQueryDict,
  IQueryDictData
} from '@nbase/shared';

/**
 * 字典信息
 */
export type Dict = IDict;

/**
 * 字典数据信息
 */
export type DictData = IDictData;

/**
 * 创建字典请求参数
 */
export type CreateDictDto = ICreateDict;

/**
 * 更新字典请求参数
 */
export type UpdateDictDto = IUpdateDict;

/**
 * 查询字典请求参数
 */
export type QueryDictDto = IQueryDict;

/**
 * 创建字典数据请求参数
 */
export type CreateDictDataDto = ICreateDictData;

/**
 * 更新字典数据请求参数
 */
export type UpdateDictDataDto = IUpdateDictData;

/**
 * 查询字典数据请求参数
 */
export type QueryDictDataDto = IQueryDictData;

/**
 * 字典服务
 */
export const dictService = {
  /**
   * 获取字典列表
   */
  getList(params?: QueryDictDto): Promise<IPaginationResponse<Dict>> {
    return get('/system/dict', { params });
  },

  /**
   * 获取所有字典（不分页）
   */
  getAll(): Promise<Dict[]> {
    return get('/system/dict');
  },

  /**
   * 获取字典详情
   */
  getById(id: string): Promise<Dict> {
    return get(`/system/dict/${id}`);
  },

  /**
   * 创建字典
   */
  create(data: CreateDictDto): Promise<Dict> {
    return post('/system/dict', data);
  },

  /**
   * 更新字典
   */
  update(id: string, data: UpdateDictDto): Promise<Dict> {
    return put(`/system/dict/${id}`, data);
  },

  /**
   * 删除字典
   */
  delete(id: string): Promise<{ message: string }> {
    return del(`/system/dict/${id}`);
  },
};

/**
 * 字典数据服务
 */
export const dictDataService = {
  /**
   * 获取字典数据列表
   */
  getList(params?: QueryDictDataDto): Promise<IPaginationResponse<DictData>> {
    return get('/system/dict-data', { params });
  },

  /**
   * 获取字典数据详情
   */
  getById(id: string): Promise<DictData> {
    return get(`/system/dict-data/${id}`);
  },

  /**
   * 创建字典数据
   */
  create(data: CreateDictDataDto): Promise<DictData> {
    return post('/system/dict-data', data);
  },

  /**
   * 更新字典数据
   */
  update(id: string, data: UpdateDictDataDto): Promise<DictData> {
    return put(`/system/dict-data/${id}`, data);
  },

  /**
   * 删除字典数据
   */
  delete(id: string): Promise<{ message: string }> {
    return del(`/system/dict-data/${id}`);
  },
};

